// This example shows how to subscribe to events with specified event attributes, and obtain the attribute values in event // notifications. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . // OPC client and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-CSharp . // Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own // a commercial license in order to use Online Forums, and we reply to every post. using System; using System.Collections.Generic; using System.Threading; using OpcLabs.EasyOpc.AlarmsAndEvents; using OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.OperationModel; namespace DocExamples.AlarmsAndEvents._EasyAENotificationEventArgs { class AttributeValues { public static void Main1() { // Instantiate the OPC-A&E client object. var aeClient = new EasyAEClient(); // Instantiate the OPC-DA client object. var daClient = new EasyDAClient(); var eventHandler = new EasyAENotificationEventHandler(aeClient_Notification); aeClient.Notification += eventHandler; // Inactivate the event condition (we will later activate it and receive the notification) daClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Inactivate", true); var subscriptionFilter = new AESubscriptionFilter { Sources = new AENodeDescriptor[] { "Simulation.ConditionState1" } }; // Prepare a dictionary holding requested event attributes for each event category // The event category IDs and event attribute IDs are hard-coded here, but can be obtained from the OPC // server by querying as well. var returnedAttributesByCategory = new AEAttributeSetDictionary { [0x00ECFF02] = new long[] {0x00EB0003, 0x00EB0008} }; Console.WriteLine("Subscribing to events..."); int handle = aeClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, null, subscriptionFilter, returnedAttributesByCategory); // Give the refresh operation time to complete Thread.Sleep(5 * 1000); // Trigger an event carrying specified attributes (activate the condition) try { daClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.AttributeValues.15400963", 123456); daClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.AttributeValues.15400968", "Some string value"); daClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", true); } catch (OpcException opcException) { Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message); return; } Console.WriteLine("Processing event notifications for 10 seconds..."); Thread.Sleep(10 * 1000); aeClient.UnsubscribeEvents(handle); } // Notification event handler static void aeClient_Notification(object sender, EasyAENotificationEventArgs e) { if (!e.Succeeded) { Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief); return; } if (!e.Refresh && (!(e.EventData is null))) { // Display all received event attribute IDs and their corresponding values Console.WriteLine("Event attribute count: {0}", e.EventData.AttributeValues.Count); foreach (KeyValuePair<long, object> pair in e.EventData.AttributeValues) Console.WriteLine(" {0}: {1}", pair.Key, pair.Value); } } } }
' This example shows how to subscribe to events with specified event attributes, and obtain the attribute values in event ' notifications. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . ' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET . ' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own ' a commercial license in order to use Online Forums, and we reply to every post. Imports System.Threading Imports OpcLabs.EasyOpc.AlarmsAndEvents Imports OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.OperationModel Namespace AlarmsAndEvents._EasyAENotificationEventArgs Friend Class AttributeValues Public Shared Sub Main1() Dim aeClient = New EasyAEClient() Dim daClient = New EasyDAClient() Dim eventHandler = New EasyAENotificationEventHandler(AddressOf aeClient_Notification) AddHandler aeClient.Notification, eventHandler ' Inactivate the event condition (we will later activate it and receive the notification) daClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Inactivate", True) Dim subscriptionFilter As New AESubscriptionFilter subscriptionFilter.Sources = New AENodeDescriptor() {"Simulation.ConditionState1"} ' Prepare a dictionary holding requested event attributes for each event category ' The event category IDs and event attribute IDs are hard-coded here, but can be obtained from the OPC ' server by querying as well. Dim returnedAttributesByCategory = New AEAttributeSetDictionary() returnedAttributesByCategory(&HECFF02) = New Long() {&HEB0003, &HEB0008} Console.WriteLine("Subscribing to events...") Dim handle As Integer = aeClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, Nothing, subscriptionFilter, returnedAttributesByCategory) ' Give the refresh operation time to complete Thread.Sleep(5 * 1000) ' Trigger an event carrying specified attributes (activate the condition) Try daClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.AttributeValues.15400963", 123456) daClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.AttributeValues.15400968", "Some string value") daClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", True) Catch opcException As OpcException Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message) Exit Sub End Try Console.WriteLine("Processing event notifications for 10 seconds...") Thread.Sleep(10 * 1000) aeClient.UnsubscribeEvents(handle) End Sub ' Notification event handler Private Shared Sub aeClient_Notification(ByVal sender As Object, ByVal e As EasyAENotificationEventArgs) If Not e.Succeeded Then Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief) Exit Sub End If If (Not e.Refresh) AndAlso (e.EventData IsNot Nothing) Then ' Display all received event attribute IDs and their corresponding values Console.WriteLine("Event attribute count: {0}", e.EventData.AttributeValues.Count) For Each pair As KeyValuePair(Of Long, Object) In e.EventData.AttributeValues Console.WriteLine(" {0}: {1}", pair.Key, pair.Value) Next pair End If End Sub End Class End Namespace
Rem This example subscribe to events, and displays rich information available with each event notification. Rem Rem Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Rem OPC client and subscriber examples in VBScript on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBScript . Rem Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own Rem a commercial license in order to use Online Forums, and we reply to every post. Option Explicit Dim ServerDescriptor: Set ServerDescriptor = CreateObject("OpcLabs.EasyOpc.ServerDescriptor") ServerDescriptor.ServerClass = "OPCLabs.KitEventServer.2" Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.EasyAEClient") WScript.ConnectObject Client, "Client_" WScript.Echo "Subscribing..." Dim SubscriptionParameters: Set SubscriptionParameters = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.AESubscriptionParameters") SubscriptionParameters.NotificationRate = 1000 Dim handle: handle = Client.SubscribeEvents(ServerDescriptor, SubscriptionParameters, True, Nothing) WScript.Echo "Processing event notifications for 1 minute..." WScript.Sleep 60*1000 Client.UnsubscribeEvents handle Rem Notification event handler Sub Client_Notification(Sender, e) On Error Resume Next WScript.Echo WScript.Echo "e.Exception.Message: " & e.Exception.Message WScript.Echo "e.Exception.Source: " & e.Exception.Source WScript.Echo "e.Exception.ErrorCode: " & e.Exception.ErrorCode WScript.Echo "e.Arguments.State: " & e.Arguments.State WScript.Echo "e.Arguments.ServerDescriptor.MachineName: " & e.Arguments.ServerDescriptor.MachineName WScript.Echo "e.Arguments.ServerDescriptor.ServerClass: " & e.Arguments.ServerDescriptor.ServerClass WScript.Echo "e.Arguments.SubscriptionParameters.Active: " & e.Arguments.SubscriptionParameters.Active WScript.Echo "e.Arguments.SubscriptionParameters.NotificationRate: " & e.Arguments.SubscriptionParameters.NotificationRate Rem IMPROVE: Display Arguments.SubscriptionParameters.Filter details WScript.Echo "e.Arguments.SubscriptionParameters.Filter: " & e.Arguments.SubscriptionParameters.Filter Rem IMPROVE: Display Arguments.SubscriptionParameters.ReturnedAttributesByCategory details WScript.Echo "e.Arguments.SubscriptionParameters.ReturnedAttributesByCategory: " & e.Arguments.SubscriptionParameters.ReturnedAttributesByCategory WScript.Echo "e.Refresh: " & e.Refresh WScript.Echo "e.RefreshComplete: " & e.RefreshComplete WScript.Echo "e.EnabledChanged: " & e.EnabledChanged WScript.Echo "e.ActiveChanged: " & e.ActiveChanged WScript.Echo "e.AcknowledgedChanged: " & e.AcknowledgedChanged WScript.Echo "e.QualityChanged: " & e.QualityChanged WScript.Echo "e.SeverityChanged: " & e.SeverityChanged WScript.Echo "e.SubconditionChanged: " & e.SubconditionChanged WScript.Echo "e.MessageChanged: " & e.MessageChanged WScript.Echo "e.AttributeChanged: " & e.AttributeChanged WScript.Echo "e.EventData.QualifiedSourceName: " & e.EventData.QualifiedSourceName WScript.Echo "e.EventData.Time: " & e.EventData.Time WScript.Echo "e.EventData.TimeLocal: " & e.EventData.TimeLocal WScript.Echo "e.EventData.Message: " & e.EventData.Message WScript.Echo "e.EventData.EventType: " & e.EventData.EventType WScript.Echo "e.EventData.CategoryId: " & e.EventData.CategoryId WScript.Echo "e.EventData.Severity: " & e.EventData.Severity Rem IMPROVE: Display EventData.AttributeValues details WScript.Echo "e.EventData.AttributeValues: " & e.EventData.AttributeValues WScript.Echo "e.EventData.ConditionName: " & e.EventData.ConditionName WScript.Echo "e.EventData.SubconditionName: " & e.EventData.SubconditionName WScript.Echo "e.EventData.Enabled: " & e.EventData.Enabled WScript.Echo "e.EventData.Active: " & e.EventData.Active WScript.Echo "e.EventData.Acknowledged: " & e.EventData.Acknowledged WScript.Echo "e.EventData.Quality: " & e.EventData.Quality WScript.Echo "e.EventData.AcknowledgeRequired: " & e.EventData.AcknowledgeRequired WScript.Echo "e.EventData.ActiveTime: " & e.EventData.ActiveTime WScript.Echo "e.EventData.ActiveTimeLocal: " & e.EventData.ActiveTimeLocal WScript.Echo "e.EventData.Cookie: " & e.EventData.Cookie WScript.Echo "e.EventData.ActorId: " & e.EventData.ActorId End Sub
# This example shows how to subscribe to events with specified event attributes, and obtain the attribute values in # event notifications. # # Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . # OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python . # Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own # a commercial license in order to use Online Forums, and we reply to every post. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc import time # Import .NET namespaces. from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.AlarmsAndEvents import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.OperationModel import * # Notification event handler def notification(sender, e): if not e.Succeeded: print('*** Failure: ', e.ErrorMessageBrief, sep='') return if (not e.Refresh) and (e.EventData is not None): # Display all received event attribute IDs and their corresponding values. print('Event attribute count: ', e.EventData.AttributeValues.Count, sep='') for pair in e.EventData.AttributeValues: print(' ', pair.Key, ': ', pair.Value, sep='') # Instantiate the OPC-A&E client object. aeClient = EasyAEClient() # Instantiate the OPC-DA client object. daClient = EasyDAClient() # aeClient.Notification += notification # Inactivate the event condition (we will later activate it and receive the notification). try: IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2', 'SimulateEvents.ConditionState1.Inactivate', True) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message) exit() subscriptionFilter = AESubscriptionFilter() subscriptionFilter.Sources = [AENodeDescriptor('Simulation.ConditionState1')] # Prepare a dictionary holding requested event attributes for each event category. # The event category IDs and event attribute IDs are hard-coded here, but can be obtained from the OPC # server by querying as well. returnedAttributesByCategory = AEAttributeSetDictionary() returnedAttributesByCategory.Add(0x00ECFF02, [0x00EB0003, 0x00EB0008]) print('Subscribing to events...') handle = IEasyAEClientExtension.SubscribeEvents(aeClient, '', 'OPCLabs.KitEventServer.2', 1000, None, subscriptionFilter, returnedAttributesByCategory) # Give the refresh operation time to complete. time.sleep(5) # Trigger an event carrying specified attributes (activate the condition). try: IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2', 'SimulateEvents.ConditionState1.AttributeValues.15400963', 123456) IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2', 'SimulateEvents.ConditionState1.AttributeValues.15400968', 'Some string value') IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2', 'SimulateEvents.ConditionState1.Activate', True) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message) exit() print('Processing event notifications for 10 seconds...') time.sleep(10) aeClient.UnsubscribeEvents(handle) aeClient.Notification -= notification print('Finished.')
Copyright © 2004-2024 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Documentation Home, Send Feedback. Resources: Knowledge Base, Product Downloads. Technical support: Online Forums, FAQ.Missing some example? Ask us for it on our Online Forums! You do not have to own a commercial license in order to use Online Forums, and we reply to every post.